<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 变量提升，暂时性死区，块级作用域，重复的声明，修改声明的变量，使用

      // console.log(a);
      // var a =  10;
      // console.log(a);
      // a='dffd'
      // function change(params) {
      //     var b =66;
      //     console.log(b);
      //     c=88
      // }
      // change()
      // console.log(a);
      // console.log(b);
      // console.log(c);
      //let
      console.log(a); //不存在变量提升,暂时性死区
      let a = 12;
      console.log(a);
      a = 88888;
      {
        let b = 123; //存在块级作用域
      }
      let ab = 5656;
      console.log(b);

      function fun(params) {
        let params = 234; //不能再函数内部重复声明形参
      }

      //const声明只读的常量
      // const str = '桂林';
      // str = 1324 //一旦声明不允许改变
      // const obj ={}
      // obj.myObj='北海'
      // obj.myStr='桂北'
      // console.log(obj);
      // obj={a:1} //保证的是内存地址不变

      // setTimeout+for输出1,2,3,4,5
      for (var i = 1; i <= 5; i++) {
        setTimeout(() => {
          console.log(i);
        }, i * 1000);
      }
      //利用闭包解决
      for (var i = 1; i <= 5; i++) {
        setTimeout(
          (function (i) {
            console.log(i);
          })(i),
          i * 1000
        );
      }

      // function timer(i) {
      //     setTimeout(
      //         console.log(i)
      //     , i*1000);
      // }
      // for(var i =1;i<=5;i++){
      // timer(i)
      // }

      for (let i = 1; i <= 5; i++) {
        setTimeout(() => {
          console.log(i);
        }, i * 1000);
      }
    </script>
  </body>
</html>
